package com.demo.java.OD1_50.OD12;

import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【5键键盘的输出 | 五键键盘】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145508370
 */
public class OdMain {

    /**
     * 主方法，读取输入并执行相应的操作。
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        // 使用 try-with-resources 确保 Scanner 被正确关闭
        try (Scanner s = new Scanner(System.in)) {
            // 读取输入字符串，操作以空格分隔
            String nums = s.nextLine();
            String[] list = nums.split(" ");  // 将操作分解为数组

            // 初始化辅助变量
            StringBuilder builder = new StringBuilder(); // 用于存储字符串的主要内容
            String select = "";  // 用于存储当前选中的字符串（可能为空）
            String copy = "";  // 用于存储复制的字符串

            // 遍历操作列表，处理每个操作
            for (String op : list) {
                // 根据操作类型执行相应的操作
                switch (op) {
                    case "1":  // 插入操作：向 builder 中追加字符 'A'
                        select = empty(builder, select); // 清空 select
                        builder.append('A');  // 在 builder 末尾添加字符 'A'
                        break;

                    case "2":  // 复制操作：将 select 内容赋给 copy
                        copy = !select.isEmpty() ? select : copy;  // 如果 select 非空，则将其赋给 copy
                        break;

                    case "3":  // 清空操作：如果 select 非空，将其赋给 copy，并清空 select 和 builder
                        if (!select.isEmpty()) {
                            copy = select;  // 复制 select 的内容
                            select = "";  // 清空 select
                            builder = new StringBuilder();  // 清空 builder
                        }
                        break;

                    case "4":  // 替换操作：清空 select，然后将 copy 内容追加到 builder
                        select = empty(builder, select);  // 清空 select
                        builder.append(copy);  // 将 copy 的内容追加到 builder
                        break;

                    case "5":  // 保存操作：如果 builder 非空，将其内容赋值给 select
                        select = builder.length() != 0 ? builder.toString() : select;  // 如果 builder 有内容，保存其值到 select
                        break;

                    default:  // 默认情况，跳过该操作
                        break;
                }
            }

            // 输出最终 builder 的长度
            System.out.print(builder.length());
        } catch (Exception e) {
            e.printStackTrace();  // 如果出现异常，输出堆栈信息
        }
    }

    /**
     * 辅助方法，用于清空 select 字符串的内容。
     * @param builder 当前的 StringBuilder 对象
     * @param select 当前选中的字符串
     * @return 清空后的 select 字符串
     */
    private static String empty(StringBuilder builder, String select) {
        // 如果 select 非空，清空 builder 中与 select 长度相等的内容
        if (!select.isEmpty()) {
            builder.replace(0, select.length(), "");  // 清空 builder 的前 select.length() 个字符
            select = "";  // 清空 select 字符串
        }
        return select;  // 返回清空后的 select 字符串
    }
}
